return Def.DifficultyList {
		Name="DifficultyList";
		InitCommand=cmd();
		OnCommand=cmd();
		OffCommand=cmd();
		
		SetCommand=function(self) self:setfromgamestate(); end;
		--CurrentSongChangedMessageCommand=cmd(playcommand,"Set");
		--CurrentCourseChangedMessageCommand=cmd(playcommand,"Set");
		CurrentStepsP1ChangedMessageCommand=cmd(playcommand,"Set");
		CurrentStepsP2ChangedMessageCommand=cmd(playcommand,"Set");
		CurrentTrailP1ChangedMessageCommand=cmd(playcommand,"Set");
		CurrentTrailP2ChangedMessageCommand=cmd(playcommand,"Set");
		
		CursorP1 = LoadActor("cursorp1")..{
			Name="CursorP1";
			InitCommand=function(self)
				self:player(PLAYER_1);
				(cmd(x,15;y,-20;horizalign,left;pulse;effectmagnitude,1,1.1,0;effectperiod,1;effectclock,'bgm'))(self);
			end;
			
			OnCommand=cmd();
			OffCommand=cmd();
			ShowCommand=cmd();
			HideCommand=cmd();
			MoveCommand=cmd();
			PlayerJoinedMessageCommand=cmd(playcommand,"Init")
		};
		
		CursorP2 = LoadActor("cursorp2")..{
			Name="CursorP2";
			InitCommand=function(self)
				self:player(PLAYER_2);
				(cmd(x,15;y,20;horizalign,left;pulse;effectmagnitude,1,1.1,0;effectperiod,1;effectclock,'bgm'))(self);
			end;
			
			OnCommand=cmd();
			OffCommand=cmd();
			ShowCommand=cmd();
			HideCommand=cmd();
			MoveCommand=cmd();
			PlayerJoinedMessageCommand=cmd(playcommand,"Init")
		};
		
		CursorP1Frame = Def.ActorFrame {
			Name='CursorP1Frame';
			ChangeCommand=cmd(stoptweening;linear,0.1);
		};
		
		CursorP2Frame = Def.ActorFrame {
			Name='CursorP2Frame';
			ChangeCommand=cmd(stoptweening;linear,0.1);
		};
	};